float CMoteurCollide::getTheNearestCollision(float elapsedTime)
{
    cld1=cld2=NULL;
    vector<CCollide*>::iterator it1,it2,mx,mxP;
    
    Vecteur p,v;
    
    float r,a,b,delta;
    
    CCollide *c1,*c2;
    
    bool switch1,switch2;
    switch1=true;
    
    mxP=vectColl.end();
    mx=vectLsr.end();
    for(it1=vectColl.begin();it1!=mx;it1++)
    {
        if(switch1)
        {
            if(it1==mxP)
            {
                switch1=false;
                it1=vectLsr.begin();
                if(it1==mx)break;
                switch2=false;
            }
            else switch2=true;
        }
        else switch2=false;
        
        c1=*it1;
        
        if(tr && c1->isNotFixed)
        {
            a=tr->getIntersec(c1->pos,((CCollideMv*)c1)->vel,elapsedTime,c1->rayon,0.5);
            if(a>0.000000001 && a<elapsedTime)
            {
                elapsedTime=a;
                cld1=c1;
                cld2=NULL;
            }
        }
        
        for(it2=it1+1;it2!=mx;it2++)
        {
            if(switch2 && (it2==mxP))
            {
                switch2=false;
                it2=vectLsr.begin();
                if(it2==mx)break;
                switch2=false;
            }
            c2=*it2;
            
            if(c1->isNotFixed || c2->isNotFixed)
            {
                if(!(c2->isNotFixed))
                {
                    c2=c1;
                    c1=*it2;
                }
                
                r=c1->rayon+c2->rayon;
                p=c2->pos;
                p-=c1->pos;
                v=((CCollideMv*)c2)->vel;
                
                if(c1->isNotFixed)v-=((CCollideMv*)c1)->vel;
                
                b=p*v;
                if(b<=0.0)
                {
                    a=v*v;
                    
                    if(a>0.0)
                    {
                        r*=r;
                        r=p*p-r;
                        if(r<-0.0000001)
                        {
                            cld1=c1;
                            cld2=c2;
                            return -1.0;
                        }
                        
                        delta=b*b-a*r;
                        
                        if(delta>0.0)
                        {
                            r=(-b-sqrtf(delta))/a;
                            if(r<elapsedTime)
                            {
                                elapsedTime=r;
                                cld1=c1;
                                cld2=c2;
                            }
                        }
                        else if(delta==0.0)
                        {
                            r=(-b)/a;
                            if(r<elapsedTime)
                            {
                                elapsedTime=r;
                                cld1=c1;
                                cld2=c2;
                            }
                        }
                    }//if a
                }//if b
            }// if One is not Fixed
        }// for2
    }//for 1
    
    return elapsedTime;
}